home *** CD-ROM | disk | FTP | other *** search
- /* © 1993 Jon Wätte, Stockholm
- *
- * This is unpublished proprietary source code, and may not be used,
- * released, copied, stored in a retrieval system, modified or shown
- * to anyone else without the copyright holders’ prior written
- * permission.
- *
- * Denna källkod skyddas av upphovsrätt, och klassas som opublicerat
- * hemligt material. Ingen användning, kopiering, avskrivning,
- * vidarebefodring, ändring eller publicering av denna källkod eller
- * del härav får ske utan att skriftligt tillstånd först erhållits från
- * upphovsrättsinnehavaren.
- */
-
- /*
- * h+utils.c
- *
- * Utilities you usually want
- */
-
- #include "h+utils.h"
- #include "Exceptions.h"
-
-
- char *
- cstrcpy ( char * dst , char * src ) {
- register char * s = src ;
- register char * d = dst ;
-
- while ( * ( d ++ ) = * ( s ++ ) ) ;
- return dst ;
- }
-
-
- void
- DisplayPictureTimeout ( PicHandle pict , short windowID , long timeout , Point textWhere ,
- short justification , unsigned char * text , short font , short size ,
- short transferMode ) {
- Rect r ;
- long ticks ;
- WindowPtr wp ;
- EventRecord er ;
- GrafPtr gp ;
-
- GetPort ( & gp ) ;
- FlushEvents ( -1 , 0 ) ;
- ticks = TickCount ( ) + timeout ;
-
- wp = GetNewWindow ( windowID , NULL , ( WindowPtr ) -1L ) ;
- if ( ! wp ) {
- SysBeep ( 20 ) ;
- return ;
- }
- SetPort ( wp ) ;
- r = ( * pict ) -> picFrame ;
- SetOrigin ( - r . left , - r . top ) ;
- SizeWindow ( wp , r . right - r . left , r . bottom - r . top , 1 ) ;
- ShowWindow ( wp ) ;
- SetPort ( wp ) ;
- HLock ( ( Handle ) pict ) ;
- DrawPicture ( pict , & ( ( * pict ) -> picFrame ) ) ;
- if ( text ) {
- TextFont ( font ) ;
- TextSize ( size ) ;
- TextMode ( transferMode ) ;
- switch ( justification ) {
- case teJustLeft :
- case teJustCenter :
- textWhere . h = ( ( * pict ) -> picFrame . right + ( * pict ) -> picFrame . left -
- StringWidth ( text ) ) / 2 ;
- break ;
- case teJustRight :
- textWhere . h = ( * pict ) -> picFrame . right - textWhere . h - StringWidth ( text ) ;
- break ;
- case teForceLeft :
- textWhere . h += ( * pict ) -> picFrame . left ;
- break ;
- }
- MoveTo ( textWhere . h , textWhere . v ) ;
- DrawString ( text ) ;
- }
-
- while ( TickCount ( ) < ticks ) {
- EventAvail ( keyDownMask + mDownMask , & er ) ;
- if ( er . what == keyDown || er . what == mouseDown ) {
- break ;
- }
- }
- FlushEvents ( keyDownMask + mDownMask , 0 ) ;
- SetWindowPic ( wp , NULL ) ;
- DisposeWindow ( wp ) ;
- SetPort ( gp ) ;
- }
-
-
- void
- _BlockClear ( void * ptr , long size ) {
- register long * pp = ( long * ) ptr ;
- register long cnt = size ;
-
- again :
- if ( cnt < 1 ) {
- ASSERT ( cnt >= 0 ) ;
- return ;
- }
- if ( cnt < 8 ) {
- asm {
- bra.s @test
- loop: clr.b (pp)+
- test: dbra cnt,@loop
- }
- return ;
- }
- if ( ( ( long ) pp ) & 1 ) {
- asm {
- clr.b (pp)+
- subq.l #1,cnt
- }
- }
- if ( ( ( long ) pp ) & 2 ) {
- asm {
- clr.w (pp)+
- subq.l #2,cnt
- }
- }
- while ( cnt & ~3L ) {
- * ( pp ++ ) = 0 ;
- cnt -= 4 ;
- }
- if ( cnt ) {
- goto again ;
- }
- }
-
-
- short
- GetTempFSS ( const FSSpec * oldFile , FSSpec * tempFile ) {
- short vRef ;
- long parID ;
- Str63 name ;
- short err ;
- short retries = 0 ;
- long delayEnd ;
-
- if ( err = FindFolder ( oldFile -> vRefNum , kTemporaryFolderType , kCreateFolder ,
- & vRef , & parID ) ) {
- vRef = oldFile -> vRefNum ;
- parID = oldFile -> parID ;
- }
- tryAgain :
- NumToString ( TickCount ( ) , name ) ;
- if ( fnfErr != ( err = FSMakeFSSpec ( vRef , parID , name , tempFile ) ) ) {
- if ( ! err ) {
- if ( retries > 5 ) {
- return dupFNErr ;
- }
- retries ++ ;
- Delay ( ( Random ( ) & 0x7 ) + 1 , & delayEnd ) ; /* Try to solve collisions in time */
- goto tryAgain ;
- }
- return err ;
- }
- return noErr ;
- }
-
-
- void
- SlateRgn ( RgnHandle rgn , RGBColor medianColor ) {
- RgnHandle drw = NewRgn ( ) ;
- RGBColor colr = medianColor ;
-
- colr . red = colr . red >> 1 ;
- colr . green = colr . green >> 1 ;
- colr . blue = colr . blue >> 1 ;
- RGBForeColor ( & colr ) ;
- CopyRgn ( rgn , drw ) ;
- OffsetRgn ( drw , -1 , -1 ) ;
- DiffRgn ( rgn , drw , drw ) ;
- PaintRgn ( drw ) ;
-
- colr . red += 0x7fff ;
- colr . green += 0x7fff ;
- colr . blue += 0x7fff ;
- RGBForeColor ( & colr ) ;
- CopyRgn ( rgn , drw ) ;
- OffsetRgn ( drw , 1 , 1 ) ;
- DiffRgn ( rgn , drw , drw ) ;
- PaintRgn ( drw ) ;
-
- DisposeRgn ( drw ) ;
- }
-
-
- short
- PixelDepth ( GDHandle gd ) {
- PixMapHandle pmh ;
- if ( ! gd ) {
- return 0 ;
- }
- pmh = ( * gd ) -> gdPMap ;
- if ( ! pmh ) {
- return 0 ;
- }
- return ( * pmh ) -> pixelSize ;
- }
-
-
- pascal void
- FrameItem ( DialogPtr dp , short item ) {
- short kind ;
- Handle ih ;
- Rect where ;
-
- GetDItem ( dp , item , & kind , & ih , & where ) ;
- PenSize ( 3 , 3 ) ;
- FrameRoundRect ( & where , 16 , 16 ) ;
- PenSize ( 1 , 1 ) ;
- }
-
-
- void
- ConcatPStrings ( unsigned char * dest , const unsigned char * from ) {
-
- unsigned char * to ;
- unsigned char * end ;
- unsigned char * fromEnd = end + * end + 1 ;
-
- from ++ ;
- end = dest + 256 ;
- to = dest + * dest + 1 ;
- while ( to < end && from < fromEnd ) {
- * ( to ++ ) = * ( from ++ ) ;
- ( * dest ) ++ ;
- }
- }
-
-
- void
- CopyPString ( const unsigned char * from , unsigned char * to ) {
-
- int len = * from ;
-
- while ( len >= 0 ) {
- * ( to ++ ) = * ( from ++ ) ;
- len -- ;
- }
- }
-